package com.pm.service;

import com.pm.entity.DailyReport;


import java.util.List;

/**
 * 日报服务接口
 */
public interface DailyReportService {
    
    /**
     * 创建日报
     * @param dailyReport 日报信息
     * @return 创建的日报
     */
    DailyReport createDailyReport(DailyReport dailyReport);
    
    /**
     * 更新日报
     * @param dailyReport 日报信息
     * @return 更新的日报
     */
    DailyReport updateDailyReport(DailyReport dailyReport);
    
    /**
     * 删除日报
     * @param id 日报ID
     * @return 删除结果
     */
    boolean deleteDailyReport(String id);
    
    /**
     * 根据ID查找日报
     * @param id 日报ID
     * @return 日报信息
     */
    DailyReport findById(String id);
    
    /**
     * 获取所有日报
     * @return 日报列表
     */
    List<DailyReport> getAllDailyReports();
    
    /**
     * 根据用户ID查找日报
     * @param userId 用户ID
     * @return 日报列表
     */
    List<DailyReport> findByUserId(String userId);
    
    /**
     * 根据项目ID查找日报
     * @param projectId 项目ID
     * @return 日报列表
     */
    List<DailyReport> findByProjectId(String projectId);
    
    /**
     * 根据用户ID和日期查找日报
     * @param userId 用户ID
     * @param reportDate 报告日期
     * @return 日报信息
     */
    DailyReport findByUserIdAndDate(String userId, String reportDate);
    
    /**
     * 根据日期范围查找日报
     * @param startDate 开始日期
     * @param endDate 结束日期
     * @return 日报列表
     */
    List<DailyReport> findByDateRange(String startDate, String endDate);
    
    /**
     * 根据用户ID和日期范围查找日报
     * @param userId 用户ID
     * @param startDate 开始日期
     * @param endDate 结束日期
     * @return 日报列表
     */
    List<DailyReport> findByUserIdAndDateRange(String userId, String startDate, String endDate);
    
    /**
     * 检查用户今日是否已提交日报
     * @param userId 用户ID
     * @return 是否已提交
     */
    boolean hasSubmittedToday(String userId);
    
    /**
     * 获取用户本周的工作时长统计
     * @param userId 用户ID
     * @return 工作时长
     */
    Double getWeeklyWorkHours(String userId);
    
    /**
     * 获取用户月工作时长
     * @param userId 用户ID
     * @param month 月份
     * @return 工作时长
     */
    Double getMonthlyWorkHours(String userId, int month);
    
    /**
     * 检查用户今天是否已提交日报
     * @param userId 用户ID
     * @return 是否已提交
     */
    boolean hasSubmittedTodayReport(String userId);
}